/**
 * 工程名: 	MyExplorer
 * 文件名: 	Tools.java
 * 创建人:  	guo.tianxiang
 * 创建时间: 	2014-2-24 下午8:14:45
 * 版权所有：	Copyright (c) 2014 苏州科大恒星信息技术有限公司  
 * 文件描述: 集成一些工具方法
 * -----------------------------变更记录 ----------------------------- 
 * 日期        		变更人      		版本号  		变更描述  
 * ------------------------------------------------------------------  
 * 2014-2-24     guo.tianxiang   	1.0       	first created  
 */
package com.tianxiang.utils;

import java.io.File;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.text.NumberFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 集成一些处理字符等功能的静态工具方法
 * 
 * @since MyExplorer 应用程序版本号
 * @version 1.0 2014-2-24
 * @author guo.tianxiang
 */
public class Tools {
	static final float Mb = 1024 * 1024;
	static final float Kb = 1024;
	static final float Gb = Mb * Kb;
	public static String root = "D:\\毕业设计\\disk\\";
	public static String recycal="D:\\毕业设计\\recycal\\";
	public static String publicPath="D:\\毕业设计\\public\\";
	public static final String FOLDERTYPE = "文件夹";

	/**
	 * 
	 * 根据文件大小属性处理成合适单位的文件大小
	 * 
	 * @param size通过File
	 *            .getSize()获得的文件大小
	 * @return返回合适的文件大小
	 */
	public static String dealFileSize(long size) {
		NumberFormat numberFormat = NumberFormat.getInstance();
		numberFormat.setMaximumFractionDigits(2); // 设置小数部分的位数
		if (size > Gb) {
			return numberFormat.format(size / Gb) + "G";
		} else if (size > Mb) {
			return numberFormat.format(size / Mb) + "M";
		} else {
			return numberFormat.format(size / Kb) + "K";
		}
	}
	
	
	
	/**
	 * 
	* 获取文件大小，单位KB
	* @param size
	* @return
	 */
	public static float getFileSizeKB(long size) {
		return size/Kb;
	}
	
	public static float getFileSizeMB(long size) {
		return size/Mb;
	}
	
	public static float getFileSizeGB(long size) {
		return size/Gb;
	}
	
	public static float getFileSize(long size) {
		if (size>Kb) {
			return getFileSizeKB(size);
		}else if(size>Mb){
			return getFileSizeMB(size);
		}
		return getFileSizeGB(size);
	}
	/**
	 * 获取文件的最后修改时间
	 * 
	 * @param lastModified
	 *            文件最后修改的时间
	 * @return 指定格式的日期时间
	 * @throws ParseException 
	 */
	public static String fileLastModifyTime(long lastModified) throws ParseException {
		Date date = new Date(lastModified);
		SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy:MM:dd HH:mm");
		return simpleDateFormat.format(date);
	}
	/**
	 * 获取系统当前世界
	 * 
	 * @param lastModified
	 *            文件最后修改的时间
	 * @return 指定格式的日期时间
	 * @throws ParseException 
	 */
	public static String getLastModefyTime() throws ParseException {
		SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy:MM:dd HH:mm");
		Date curr=simpleDateFormat.parse(simpleDateFormat.format(new Date()));
		return simpleDateFormat.format(curr.getTime());
	}
	/**
	 * 是否永久删除文件，返回文件存在回收站的时间,单位是s
	 * @param lastModified
	 * @return
	 * @throws ParseException
	 */
	public static long getCurrTime() throws ParseException{
		SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy:MM:dd HH:mm");
		Date curr=simpleDateFormat.parse(simpleDateFormat.format(new Date()));
		return curr.getTime()/1000;
	}
	
	/**
	 * 获取文件是否在文件夹中
	 * 
	 * @param 
	 * @return 
	 */
	public static boolean isFileInFolder(String path,String username) {
		String tmpPath=path.substring(0, path.lastIndexOf("\\"));
		if(tmpPath.substring(tmpPath.lastIndexOf("\\")).endsWith(username)){
			return false;
		}
		return true;
	}
	
	/**
	 * 获取文件类型
	 * 
	 * @param name文件全名
	 * @return文件后缀名识别的文件类型
	 */
	public static String getFileType(String name) {
		// System.out.println(name.lastIndexOf('.'));

		String fileType = name.substring(name.lastIndexOf('.') + 1,
				name.length());
		// System.out.println(fileType);
		if (fileType.equals("rar") || fileType.equals("zip")) {
			return "压缩文件";
		}

		if (fileType.equals("jpg")||fileType.equals("jpeg")  || fileType.equals("gif")) {
			return "图片文件";
		}
		if (fileType.equals("txt")) {
			return "文本文件";
		}
		if (fileType.equals("doc") || fileType.equals("docx")) {
			return "WORD文件";
		}
		// 默认文件类型
		return fileType + "文件";
	}

	/**
	 * 
	 * 获得正确的绝对的访问路径
	 * @param username 与用户相关的用户根目录
	 * @param parrent请求路径的父文件夹
	 * @param folder当前请求的文件夹
	 * @return parrent和folder连接的完整的路径
	 */
	public static String getAcessPath(String userroot,String parent, String folder) {
		if(folder.equals("\\")){folder="";}
//		System.out.println("Tools……");
//		System.out.println("parent:" + parent);
//		System.out.println("folder:" + folder);
		String userRootPath=getUserPath(userroot);
		String path;
		
		if ((parent == null && folder != null)
				|| (parent != null && folder == null)) {
			path = userRootPath+userroot+ "\\" + (folder == null ? parent : folder);
		} else if (parent == null & parent == null) {
			path = userRootPath;
		} else {
		//	path = root + "\\" + parent + "\\" + folder;
			path = new File(new File(userRootPath,parent).getAbsolutePath(),folder).getAbsolutePath();
		}
		System.out.println("path=" + path);
		return path;
	}
	/**
	 * 
	* 新建用户时给用户新建根目录
	* @param username
	* @return
	 */
	public static boolean makeuserfile(String username) {
		File rootFile=new File(getAcessPath(username, "", ""));
		File reFile=new File(getRecycalPath(username));
		File pubDir=new File(publicPath);
		if(!pubDir.exists()){
			pubDir.mkdir();
		}
		if (!rootFile.exists()) {
			rootFile.mkdir();
		}
		if(!reFile.exists()){
			reFile.mkdir();
		}
		return true;
	}
	/**
	 * 获取公共根目录
	 * @param username 用户名
	 * @return
	 */
	 public static String getPublicPath(){
		 return publicPath;
	 }
	/**
	 * 获取用户根目录
	 * @param username 用户名
	 * @return
	 */
	 public static String getUserPath(String username){
		 return new File(root,username).getAbsolutePath();
	 }
	 /**
	  * 获取用户回收站路径
	  * @param username
	  * @return
	  */
	 public static String getRecycalPath(String username) {
		 return new File(recycal,username).getAbsolutePath();
		}
	 
	 /**
	  * 根据给定的文件名生成带有日期的新文件名
	  * @param fileName 给定的文件名
	  * @return
	  */
	 public static String getDateFileName(String fileName){
		 SimpleDateFormat dFormat=new SimpleDateFormat("yyyyMMddHHmmss");
		 String dateString=dFormat.format(new Date());
		 StringBuffer stringBuffer=new StringBuffer(fileName);
		 int dotIndex=fileName.lastIndexOf(".");
		 stringBuffer.insert(dotIndex, "_"+dateString);
		 return stringBuffer.toString();
	 }
	 
	 public static String makeMD5(String password) {   
		 MessageDigest md;   
		    try {   
		     // 生成一个MD5加密计算摘要   
		     md = MessageDigest.getInstance("MD5");   
		     // 计算md5函数   
		     md.update(password.getBytes());   
		     // digest()最后确定返回md5 hash值，返回值为8为字符串。因为md5 hash值是16位的hex值，实际上就是8位的字符   
		     // BigInteger函数则将8位的字符串转换成16位hex值，用字符串来表示；得到字符串形式的hash值   
		     String pwd = new BigInteger(1, md.digest()).toString(16);   
		     return pwd;   
		    } catch (Exception e) {  
		     e.printStackTrace();   
		    }   
		    return password;   
		 }
	 
	public static void main(String[] args) {
		//System.out.println(getFileType("test.gz.zt.txt"));
		//System.out.println(getDateFileName("abcd.exe"));
	//	System.out.println(makeMD5("qingqing"));
	//	System.out.println(makeMD5("zhuguohua"));
		System.out.println(makeMD5("qianqian"));
	}
	
	
	//获取文件夹大小
	public static long folderSize(File f) {

	       long  size=0; 

	       File flist[]=f.listFiles();   

	       for(int  i=0;i<flist.length;i++)  { 

	               if  (flist[i].isDirectory())  {   

	                         size=size+folderSize(flist[i]); 

	               }else{ 

	                       size=size+flist[i].length(); 

	               }

	       }

	       return size;
	}



	public static String getFileNameByPath(String realPath) {
		return realPath.substring(realPath.lastIndexOf("\\")+1);
	}
	
}
